<?php
/**
 * @author Vitaly
 * @Date: 24.04.12
 */

/*
 * Обрабатывает все действия, связанные с пользователями
 * Включает в себя регистрацию, вход, выход и отображение самой страницы пользователя
 */

class UserActionController extends ActionController
{
    // выполняется при каждом обращении к контроллеру
    // логинит юзера и добавляет во view его модель (удобно для отрисовки страницы)

    function before()
    {
        if(isSet($_SESSION['userid']))
        {
            $userMapper = new UserMapper();
            $this->view->user = $userMapper->find($_SESSION['userid']);
        }
    }

    // выполняет регистрацию пользователя
    // проверяет, существует ли юзер с таким логином/почтой

    function register()
    {
        if(isSet($this->args['nick']) && isSet($this->args['email']) && isSet($this->args['password']))
        {
            $userMapper = new UserMapper();
            if(!($userMapper->checkExist($this->args['email'],$this->args['nick'])))
            {
                $user = new UserModel();

                $user->setNick($this->args['nick'])
                     ->setEmail($this->args['email'])
                     ->setPassword($this->args['password']);

                $_SESSION['userid'] = $userMapper->add($user);
                header('Location: /user');
            }
            else
            {
                $this->view->setTitle('You are not registered')
                           ->setStructure('user_register');
                $this->view->text = 'User with similar login or email is registered yet';
                $this->view->regnick = $this->args['nick'];
                $this->view->regemail = $this->args['email'];

            }
        }
        else
        {
            $this->view->setStructure('user_register')
                       ->setTitle('Register new user');
        }
        $this->view->draw();
    }

    // обрабатывает страницу пользователя
    // срабатывает при обращении к "/user"

    function action()
    {
        if(!isset($_SESSION['userid']))
        {
            header('Location: /user/login');
        }
        else
        {
            $userMapper = new UserMapper();
            $user = $userMapper->find($_SESSION['userid']);
            $this->view->user = $user;
            $this->view->setStructure('user')
                       ->setTitle('User Page')
                       ->draw();
        }
    }

    // авторизует пользователя
    // в случае успеха передает в сессию id пользователя

    function login()
    {
        if(isSet($this->args['email']) && isSet($this->args['password']))
        {
            $userMapper = new UserMapper();
            if($user = $userMapper->extFind("`email`='" . $this->args['email'] . "'"))
            {
                if($user->getPassword() == $this->args['password'])
                {
                    $_SESSION['userid'] = $user->getId();
                    header('Location: /');
                }
                else header('Location: /user/login');
            }
            else header('Location: /user/login');
        }
        else
        {
            $this->view->setStructure('user_login')
                       ->setTitle('Log in')
                       ->draw();
        }
    }

    // выполняет "выход" пользователя очищая текущую сессию

    function logout()
    {
        session_destroy();
        header('Location: /user/login');
    }
}
